package com.flycent.hqhs.util;

import java.security.interfaces.RSAPublicKey;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.text.TextUtils;
import android.widget.TextView;

import com.flycent.hqhs.App;
import com.flycent.hqhs.bean.Product.SpecificationValues;
import com.flycent.hqhs.bean.RSAkey;
import com.flycent.hqhs.util.RSAUtils.Base64_;

public class StringUtil {

	public static String getTextViewContent(TextView textView ) {
		return textView.getText().toString().trim();
	}


	/**
	 * 验证字符串是否为空，若为空就弹出 Toast，内容为  errorStringRes
	 * @param content
	 * @param errorStringRes
	 * @return true 验证未通过，false 验证通过
	 */
	public static boolean invalidateContent(String content, int errorStringRes) {
		if( TextUtils.isEmpty(content) ) {
			if( errorStringRes > 0 ) {
				App.showShortToast(App.getInstance().getString(errorStringRes));
			}
			return true;
		}
		return false;
	}

	/**
	 * 字符串是否为手机号
	 * @param phoneNo
	 * @return true 是 手机号， false 不是 手机号
	 */
	public static boolean isPhoneNo(String phoneNo) {
		return regxStr(phoneNo, "^(\\+86)?0?1[3|4|5|8|7]\\d{9}$");
	}


	/**
	 * 校验是否为手机号
	 * @param text
	 * @return true 是 手机号， false 不是 手机号
	 */
	public static boolean validatePhoneNo( TextView text ) {
		return isPhoneNo( getTextViewContent(text) );
	}



	/**
	 * 正则匹配
	 * @param validateStr	待校验的字符串
	 * @param pattern	正则表达式
	 * @return
	 */
	public static boolean regxStr( String validateStr, String pattern ) {
		Pattern p = Pattern.compile(pattern);
		return p.matcher(validateStr).matches();
	}

	/**
	 * 验证是否为正确的固定电话
	 * @param text  待校验的字符串
	 * @return  pattern	正则表达式
	 */
	public static boolean isFixedTelePhoneNo(String text){
		String str = "^(\\d{3,4}\\-?)?\\d{7,8}$";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(text);
		return m.matches();
	}


	/**
	 *  验证是否为正确的邮箱
	 * @param email
	 * @return  true 为正确的邮箱， false 反之
	 */
	public static boolean isEmail(String email) {
		String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(email);
		return m.matches();
	}

	/**
	 *  验证是否是正确的邮编
	 * @param zipcode
	 * @return true  false
	 */
	public static boolean isZipCode(String zipcode){
		String  str = "[1-9]\\d{5}(?!\\d)";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(zipcode);
		return m.matches();
	}

	/**
	 *  验证广告为的url地址
	 * @param url
	 * @return true 则为商品
	 */
	public static boolean isProduct(String url){
		String Str = "^http.*/product/content/\\d{6}/(\\d+)\\.html$";
		Pattern p = Pattern.compile(Str);
		Matcher m = p.matcher(url);
		return m.matches();

	}

	/**
	 * 当广告为商品的时候，提取商品的id
	 * @param url
	 * @return
	 */
	public static String getProductId(String url){
		String[] ss  = url.split("/");
		String s2 = ss[ss.length-1];
		String[] s1 = s2.split("\\.");
		String id = s1[0];
		return id;
	}

	/**
	 * 验证广告位是否为以及列表
	 * @param url
	 * @return ture 为一级列表
	 */
	public static boolean isList(String url){
		String Str = "^http.*/product/list/(\\d+)\\.jhtml$";
		Pattern p = Pattern.compile(Str);
		Matcher m = p.matcher(url);
		return m.matches();

	}

	/**
	 * 验证广告位是否为二级列表
	 * @param url
	 * @return true 为二级列表
	 */
	public static boolean isCateList(String url){
		String Str = "^http.*/product/search\\.jhtml\\?cate=([^&]+)&keyWords=\\*$";
		Pattern p = Pattern.compile(Str);
		Matcher m = p.matcher(url);
		return m.matches();

	}



	/** RSA加密 */
	public static String encryptByRSA(String str, RSAkey key) {
		//		RSAPublicKey pubKey = RSAUtils.getPublicKey(
		//				Base64.encode(key.getModulus().getBytes(), Base64.NO_WRAP), 
		//				Base64.encode(key.getExponent().getBytes(), Base64.NO_WRAP));
		RSAPublicKey pubKey = RSAUtils.getPublicKey(
				Base64_.encode(key.getModulus()).getBytes(), 
				Base64_.encode(key.getExponent()).getBytes());

		try {
			return RSAUtils.encryptByPublicKey(str, pubKey);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	/**
	 *  获取 商品的详细参数
	 * @param map  传入map
	 * @return StringBuffer
	 */
	public static StringBuffer getProductPropertyforMap(Map<String, String> map){
		StringBuffer stringBuffer = new StringBuffer();
		for (Map.Entry<String, String> entry : map.entrySet()) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
			stringBuffer.append(entry.getKey() + ":" + entry.getValue()+" ");
		}
		return stringBuffer;

	}

	/**
	 * 获取商品的详细参数  
	 * @param mSpecificationValues  传入list
	 * @return
	 */
	public static StringBuffer getProductPropertyforList(List<SpecificationValues> mSpecificationValues){
		StringBuffer stringBuffer = new StringBuffer();
		for (int i = 0; i < mSpecificationValues.size(); i++) {
			stringBuffer.append(mSpecificationValues.get(i).getName()+" ");
		}
		return stringBuffer;

	}


}
